// 按需导入chooseAddress方法
import { chooseAddress, showModal, showToast, requestPayment } from '../../utils/chooseAddress.js'
// 默认导入的方式导入runtime.js文件 让其可以使用async和await关键字
import regeneratorRuntime from '../../lib/runtime/runtime.js'
// 按需导入发送请求的函数
import { request } from '../../request/index.js'
Page({
  data: {
    address: {},
    // 购物车数组数据
    cart: [],
    // 商品的总价格
    totalPrice: 0,
    // 商品的总数量
    totalNum: 0
  },

  onShow() {
    // 在页面一上来的时候就拿到缓存中的数据address并赋值给data中的address
    const address = wx.getStorageSync('address')
    // 在页面一上来的时候拿到缓存中的购物车数组数据cart，赋值给data中的cart空数组
    let cart = wx.getStorageSync("cart") || [];

    // 只保留购物车中checked为true的商品
    cart = cart.filter(v => v.checked)

    let totalPrice = 0
    let totalNum = 0
    cart.forEach(v => {
      totalPrice += v.num * v.goods_price
      totalNum += v.num
    })
    this.setData({
      cart,
      totalPrice,
      totalNum,
      address
    })
  },
  // 用户点击了支付按钮的时候触发
  async handlePay() {
    try {
      //  先从缓存中拿token看看有没有
      const token = wx.getStorageSync("token")
      // 如果没有token的话
      if (!token) {
        // 跳转到授权页面
        wx.navigateTo({
          url: '/pages/auth/index'
        });
        // 阻止代码向下执行
        return
      }
      // 缓存中有token的时候
      // console.log("缓存中有token值");
      // 请求头
      // const header = { Authorization: token }
      // 请求参数
      const order_price = this.data.totalPrice
      const consignee_addr = this.data.address.all
      const goods = []
      // 使用forEach对cart进行遍历push到goods里面
      const cart = this.data.cart
      cart.forEach(v => goods.push({
        goods_id: v.goods_id,
        goods_number: v.num,
        goods_price: v.goods_price
      }))
      // 三个请求参数组成的对象
      const orderParams = { order_price, consignee_addr, goods }
      // 发送请求获取到订单编号
      const { order_number } = await request({ url: "/my/orders/create", data: orderParams, method: "post" })
      console.log(order_number);

      // 预支付
      const { pay } = await request({ url: "/my/orders/req_unifiedorder", method: "post", data: { order_number } })
      console.log(pay);

      // // 实现真正的支付
      // const res = await requestPayment(pay)
      // // 此时会有报错说没有权限了;
      // console.log(res);

      // 查询后台 订单状态
      // const res = await request({ url: "/my/orders/chkOrder", header, method: "post", data: { order_number } })
      // console.log(res);
      // 给出支付成功的弹窗提示
      await showToast({ title: "支付成功" })

      // 移除掉购物车中已经支付过的商品
      let newCart = wx.getStorageSync("cart")
      newCart = newCart.filter(v => !v.checked)
      wx.setStorageSync("cart", newCart)

      // 跳转到订单页面
      wx.navigateTo({
        url: '/pages/order/index'
      });
    } catch (error) {
      // 支付失败给出弹窗提示
      await showToast({ title: "支付失败" })
      console.log(error);
    }
  }
})